package logger

import (
	"os"
	"path/filepath"

	"go.uber.org/zap"
	"go.uber.org/zap/zapcore"
)

// InitLogger 初始化日志系统
// 示例值: logDir="/var/log/ssh-auto-upgrade"
func InitLogger(logDir string) (*zap.Logger, error) {
	// 创建日志目录
	if err := os.MkdirAll(logDir, 0755); err != nil {
		return nil, err
	}

	// 配置日志编码器
	encoderConfig := zap.NewProductionEncoderConfig()
	encoderConfig.EncodeTime = zapcore.ISO8601TimeEncoder
	encoderConfig.EncodeLevel = zapcore.CapitalLevelEncoder

	// 文件输出
	logFile := filepath.Join(logDir, "ssh-auto-upgrade.log")
	file, err := os.OpenFile(logFile, os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0644)
	if err != nil {
		return nil, err
	}

	// 创建核心
	fileCore := zapcore.NewCore(
		zapcore.NewJSONEncoder(encoderConfig),
		zapcore.AddSync(file),
		zap.InfoLevel,
	)

	// 控制台输出（信息级别及以上）
	consoleCore := zapcore.NewCore(
		zapcore.NewConsoleEncoder(encoderConfig),
		zapcore.AddSync(os.Stderr),
		zap.InfoLevel,
	)

	// 组合核心
	core := zapcore.NewTee(fileCore, consoleCore)

	// 创建日志器，添加调用者信息
	logger := zap.New(core, zap.AddCaller())

	// 设置为全局日志器
	zap.ReplaceGlobals(logger)

	return logger, nil
}

// Sync 刷新日志缓冲区
// 示例值: 无参数
func Sync() {
	zap.L().Sync()
}